package com.kxs.stu_manager.controller;

import com.kxs.stu_manager.global.Student;
import com.kxs.stu_manager.model.StuModel;
import com.kxs.stu_manager.views.StuPage;

import java.sql.SQLException;
import java.util.ArrayList;

/**
 * @ClassName StuController
 * @Description: TODO 学生控制器类
 * @Author: 2119475835@qq.com
 * @Date: 2023/1/9
 */
public class StuController {
    private StuModel sm = new StuModel();
    /**
     * 学生功能的主控制器
     *
     * @param num        用户的操作数
     * @param competence 用户权限的操作 0 - CRUD 1 - CR 2 - R
     * @return
     */
    public boolean action(int num, String competence) throws SQLException {
        switch (num) {
            case 1:
                secSelAction(StuPage.secSelPage());
                break;
            case 2:
                if(competence.equals("2")){
                    StuPage.failed("用户权限不足！~");
                    break;
                }
                // 获取一个要添加的学生对象
                // 通过模型层进行数据的添加
                while(sm.addStu(StuPage.addStuPage()));
                break;
            case 3:
                if(competence.equals("1") || competence.equals("2")){
                    StuPage.failed("用户权限不足！~");
                    break;
                }
                // 获取要修改的学生ID
                int editStuId = StuPage.getStuID();
                // 通过模型层获取该学生信息
                ArrayList<Student> editStu = sm.selStuByID(editStuId);
                // 判断该学生信息是否存在
                if(editStu.isEmpty()){
                    StuPage.failed("学生信息不存在");
                }else{
                    // 将旧信息显示出来，并获取新的学生信息
                    Student newStu = StuPage.editStu(editStu.get(0));
                    // 进行修改操作
                    sm.updateStu(newStu);
                }
                break;
            case 4:
                if(competence.equals("1") || competence.equals("2")){
                    StuPage.failed("用户权限不足！~");
                    break;
                }
                // 获取要删除的学生ID
                int delStuID = StuPage.getStuID();
                // 在模型层根据id获取要删除的学生信息
                ArrayList<Student> delStu = sm.selStuByID(delStuID);
                if(delStu.isEmpty()){
                    System.out.println("该学生信息不存在！~");
                }else{
                    // 展示学生信息
                    StuPage.showStu(delStu);
                    if(StuPage.isDel()){ // 是否删除的页面
                        // 删除操作
                        sm.doDelStu(delStuID);
                    }else {
                        StuPage.failed("取消删除");
                    }
                }
                break;
            case 0:
                switch (StuPage.overPage()){
                    case "n":
                    case "N":
                        return true;
                    case "y":
                    case "Y":
                        return false;
                }
        }
        return true;
    }

    /**
     * 查询的调度器
     *
     * @param num 用户选择的操作数
     */
    private void secSelAction(int num) throws SQLException {
        switch (num) {
            case 1: // 查询全部
                // 通过学生模型层获取数据
                // ArrayList<Student> stuList = sm.selAllStu();
                // 将数据展示出来
                // StuPage.showAllStu(stuList);
                StuPage.showStu(sm.selAllStu());
                break;
            case 2: // 学号
                StuPage.showStu(sm.selStuByID(StuPage.getStuID()));
                break;
            case 3: // 姓名
                StuPage.showStu(sm.selStuByName(StuPage.getStuName()));
                break;
            case 4: // 性别
                StuPage.showStu(sm.selStuBySex(StuPage.getStuSex()));
                break;
            case 5: // 年龄
                // 查询年龄的二级菜单
                // 查询年龄的调度器
                secSelAgeAction(StuPage.secSelAgePage());
                break;
            case 6: // 成绩
                secSelScoreAction(StuPage.secSelScorePage());
                break;
            case 7: // 电话
                StuPage.showStu(sm.selStuByTel(StuPage.getStuTel()));
                break;
            case 8: // 班级
                StuPage.showStu(sm.selStuByClass(StuPage.getStuClass()));
                break;
            case 0: // 返回上一级
                break;
        }
    }

    /**
     * 成绩查询的调度器
     * @param num 用户输入的操作数
     */
    private void secSelScoreAction(int num) throws SQLException {
        switch (num) {
            case 1: // 精确成绩查询
                StuPage.showStu(sm.selStuByScore(StuPage.getStuScore()));
                break;
            case 2: // 区间成绩查询
                StuPage.showStu(sm.selStuByScore(StuPage.getStuScoreBetween()));
                break;
            case 0: // 结束查询
                break;
        }
    }

    /**
     * 年龄查询的调度器
     *
     * @param num 用户输入的操作数
     * @throws SQLException
     */
    private void secSelAgeAction(int num) throws SQLException {
        switch (num) {
            case 1:
                // 获取要查询的年龄
                // 通过年龄获取学生信息
                // 展示学生信息
                StuPage.showStu(sm.selStuByAge(StuPage.getStuAge()));
                break;
            case 2:
                // 获取年龄区间
                // 通过区间来获取学生信息
                // 展示学生信息
                StuPage.showStu(sm.selStuByAge(StuPage.getStuAgeBetween()));
                break;
            case 0:
                break;
        }
    }
}
